import * as React from 'react';
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
import {createApp, config} from 'ice';
import {Message} from '@alifd/next';
import LocaleProvider from '@/components/LocaleProvider';
import {getLocale} from '@/utils/locale';


const locale = getLocale();

// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
const appConfig = {
  parseSearchParams: true,
  app: {
    rootId: 'ice-container',
    addProvider: ({children}) => (
      <LocaleProvider locale={locale}>{children}</LocaleProvider>
    ),
  },
  request: {
    // 可选的，全局设置 request 是否返回 response 对象，默认为 false
    withFullResponse: false,
    throwOnError: true,
    baseURL: config.baseURL,
    headers: {},
    timeout: 2000,
    // ...RequestConfig 其他参数
    withCredentials: true,
    // 拦截器
    interceptors: {
      request: {
        onConfig: (config) => {
          // 发送请求前：可以对 RequestConfig 做一些统一处理
          // 统一携带Authorization -> Bearer Token
          const token = localStorage.getItem('token');
          if (token) {
            config.headers = {Authorization: token};
          }
          return config;
        },
        onError: (error) => {
          return Promise.reject(error);
        }
      },
      response: {
        onConfig: (response) => {
          // 请求成功：可以做全局的 toast 展示，或者对 response 做一些格式化
          if (!response.data.statusCode) {
            return response;
          }
          // eslint-disable-next-line eqeqeq
          if (!response.data.statusCode || response.data.statusCode != 200) {
            // 如果接口格式有误 联系开发 否则弹出message
            console.log(response.data.statusCode);
            if (!response.data.statusCode) {
              Message.error('接口有误,请联系开发人员');
            } else {
              Message.error(response.data.message);
            }
          }
          return response;
        },
        onError: (error) => {
          // 请求出错：服务端返回错误状态码
          const s = error.toString();
          console.log(s);

          if (s.search('timeout') !== -1) {
            Message.error('请求超时 请刷新以确定操作是否成功');
          }

          if (s.search('Network Error') !== -1) {
            Message.error('网络异常或者您的登录已失效 请检查网络或重新登录后再试');
          }
          return Promise.reject(error);
        }
      },
    }
  },
};
createApp(appConfig);
